const path = require('path');

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebPackPlugin = require('html-webpack-plugin');

module.exports = {
  context: __dirname,
  entry: {
    index: ['./src/index.ts']
  },
  node: false,
  output: {
    path: path.join(__dirname, 'dist'),
    chunkFilename: 'chunks/[id].[contenthash].js',
    publicPath: '',
    filename:'[name].[contenthash].js',
    library: "QuickEarthApp",
    libraryTarget: "umd" //使用external的Cesium时需要设置为umd，因为QE中使用模块化方式引入
  },
  devServer: {
    contentBase: path.join(__dirname, '.'),
    compress: true,
    port: 8008
  },
  devtool: 'source-map',
  module: {
    unknownContextCritical: false,
    rules: [
      {
        test: /\.tsx?$/,
        loader: "ts-loader",
        options: {
          transpileOnly: true
        }
      },
      {
        test: /\.js$/,
        enforce: "pre",
        use: ["source-map-loader"],
      },
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ]
  },
  resolve: {
    fallback: {
      fs: false,
      http: false,
      https: false,
      zlib: false,
      Buffer: false
    },
    extensions: ['.tsx', '.ts', '.js'],
    alias: {
      quickearth: path.resolve(__dirname, "public/libs/qe/quickearth.js"),
    }
  },
  externals: {
    'cesium': {
      root: 'Cesium',
      commonjs: 'cesium',
      commonjs2: 'cesium',
      amd: 'cesium'
    },
    "mapbox-gl": "mapboxgl",
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebPackPlugin({
      title: 'QuickEarthApp',
      template: './index.html',
      filename: './index.html',
      chunksSortMode: 'none',
      inlineSource: '.(css)$'
    })
  ]
};
